const fs = require('fs');
// 更多操作: https://link.juejin.cn/?target=http%3A%2F%2Fnodejs.cn%2Fapi%2Ffs.html




let filename = './data.txt';




// 文件监听
fs.watch('./', {recursive: true}, (eventType, filename) => {
    console.log(`文件:${filename}, 发生变化. 触发事件:${eventType}`)
})

return

// 内容追加到文件末尾
fs.appendFileSync(filename, "lanlang");



const fileInfo = fs.statSync(filename)
// 文件信息
console.log('是否是文件:', fileInfo.isFile());
console.log('是否是目录:', fileInfo.isDirectory());

try {
    // 查询一个不存在的文件/目录信息（会抛出异常，需要自行捕获）
    fs.statSync('not_exist.txt')
} catch (e) {
    console.log('文件不存在')
}

/**
 *
 * 属性名	描述
 * dev	设备 ID，表示该文件所在的设备。
 * mode	文件权限，包括读、写、执行等权限。
 * nlink	硬链接数。
 * uid	用户 ID，表示该文件所属的用户。
 * gid	组 ID，表示该文件所属的组。
 * rdev	设备类型，表示该文件所属设备的类型。
 * blksize	块大小，表示该文件所属设备的块大小。
 * ino	inode 号，表示该文件的 inode 编号。
 * size	该文件的大小，以字节为单位。
 * blocks	该文件占用的总块数。
 * atimeMs	最后访问时间，以毫秒为单位。
 * mtimeMs	最后修改时间，以毫秒为单位。
 * ctimeMs	最后状态改变时间，以毫秒为单位。
 * birthtimeMs	创建时间，以毫秒为单位。
 * atime	最后访问时间的格式化字符串，通常为 “YYYY-MM-DDTHH:MM:SS.mmmzz” 的形式。
 * mtime	最后修改时间的格式化字符串，通常为 “YYYY-MM-DDTHH:MM:SS.mmmzz” 的形式。
 * ctime	最后状态改变时间的格式化字符串，通常为 “YYYY-MM-DDTHH:MM:SS.mmmzz” 的形式。
 * birthtime	创建时间的格式化字符串，通常为 “YYYY-MM-DDTHH:MM:SS.mmmzz” 的形式。
 */


return


// ======================== 读取文件内容

// 不传递编码参数, 返回的data是buffer类型
// fs.readFile(filename, (err, data) => {
//     console.log('错误:', err);  // 没有发生错误 返回null
//     console.log('文件内容:', data.toString());
// })
// 传递编码参数, 返回的是一个字符串,
// fs.readFile(filename,'utf-8', (err, data) => {
//     console.log('错误:', err);  // 没有发生错误 返回null, 否则可以通过err.message取到错误的信息
//     // console.log('文件内容:', data.toString());
//     console.log('文件内容:', data);
// })

/*
* 1. Buffer对象是Nodejs用于处理二进制数据的。
2. 其实任意的数据在计算机底层都是二进制数据，因为计算机只认识二进制。
3. 所以读取任意的文件，返回的结果都是二进制数据，即Buffer对象
4. Buffer对象可以调用toString()方法转换成字符串。
* */

// ========================== 写入文件
filename = '1.txt';
// fs.writeFile(filename, 'this is a test content', err => {
//    if (err) return console.log('写入文件失败', err)
//     console.log('写入文件成功')
// });




// 追加方式
console.log('before')
// 异步方式
fs.appendFile(filename, 'this is a append content', err => {
    if (err) return console.log('追加数据失败', err)
    console.log('追加数据成功')
})

console.log('after')


console.log(111)
// 同步方式
let result = fs.readFileSync(filename, 'utf-8')
console.log('读取文件内容:', result)
console.log(222)

/*总结：同步操作使用虽然简单，但是会影响性能，因此尽量使用异步方法，尤其是在工作过程中*/





